/**
 * ShopMixin
 * @author  fubangfu2015@163.com
 * @data    2020/12/1
 * --------------------------------------
 */
import { addListener, getShareBDUserId, isEmpty, navigate, removeListener } from '../../../utils/common';
import { postAjax } from '../../../utils/ajax';


/**
 * 创建一个分页数据对象
 * @return {{page: number, list: [], loading: boolean}}
 */
function createPaging(url) {
  return {
    url,
    page : 1,// 当前页
    list : [],// 列表数据
    loading : false,// 是否正则加载列表
  };
}

export default Behavior({
  data : {
    // 标题
    title : '天天优选',
    // 菜单
    menus : [],
    // 商品分类
    category : [],
    swiperCurrent : 0,
    // 轮播
    swiper : {
      list : [],
      duration : 800,
      interval : 6000
    },
    // 类别
    categories : [],
    // 中间的三个图片
    middle : {
      list : [],
      show : false
    },
    // 商品
    goods : createPaging('/product/hot-list'),
  },
  methods : {
    // 轮播图切换
    swiperChange(e) {
      this.setData({ swiperCurrent : e.detail.current });
    },
    // 点击菜单
    clickMenu(e) {
      const linkUrl = e.currentTarget.dataset.item.linkUrl;
      navigate((linkUrl[0] !== '/' ? '/' : '') + linkUrl);
    },
    // 点击轮播图
    clickSwiper(e) {
      navigate(e.currentTarget.dataset.url);
    },
    // 点击类别
    clickCategory(e) {
      const { id, name } = e.currentTarget.dataset;
      navigate(`/pages/cate-list/cate-list?id=${id}&name=${name}`);
    },
    // 点击热卖
    clickHotSales(e) {
      const url = e.currentTarget.dataset.url;
      if (url) navigate(url);
    },
    // 加载商品
    loadGoods(paging) {
      // 设置加载中状态，防止重复请求
      paging.loading = true;
      // 请求数据
      postAjax(paging.url, {
        page : paging.page,
        bdmin_user_id : getShareBDUserId(),
      }).then(goods => {
        paging.list = paging.list.concat(goods);
        // 取消加载中状态
        paging.loading = false;
        this.setData({
          goods : paging
        });
      });
    },
    // 页面上拉触底事件的处理函数
    onReachBottom() {
      // 当前分页数据对象
      const paging = this.data.goods;
      if (!paging.loading) {
        paging.page += 1;
        this.loadGoods(paging);
      }
    },
    // 页面显示时调用此组件的onShow方法
    onShow(promise) {
      promise.then(data => {
        const mdl = data.middle;
        const middle = [];
        if (!isEmpty(mdl.middle1)) {
          middle.push(mdl.middle1);
        }
        if (!isEmpty(mdl.middle2)) {
          middle.push(mdl.middle2);
        }
        if (!isEmpty(mdl.middle3)) {
          middle.push(mdl.middle3);
        }
        this.setData({
          middle : {
            list : middle,
            show : !!middle.length
          },
          menus : data.top,// 菜单
          categories : data.category,// 类别
          'goods.list' : data.hot_products,// 商品
          'swiper.list' : data.banners,// 轮播图,
        });
      });
    }
  },
  // 被创建时
  created() {
    addListener('shop-index:onShow', this, this.onShow);
    addListener('shop-index:onReachBottom', this, this.onReachBottom);
  },
  //
  attached() {
    // 此时触发事件，通知父页面发出事件执行onShow方法
    this.triggerEvent('ready');
  },
  //  移除时
  detached() {
    // 移除此组件上绑定的全局事件
    removeListener(this);
  },
});
